package weiyao.xinxidasai.Utils.Encryption.ARGON2;


import weiyao.xinxidasai.Utils.Encryption.SM4utils.Sm4Util;

public class ARGON2IDUtils {
    /**
     * 基础加密（Argon2）
     * @param input 原始密码
     * @param securityLevel 安全级别(1-3)
     */
    public static String encryptWithArgon2(String input, int securityLevel) {
        switch(securityLevel) {
            case 1: return Argon2PasswordEncoder.encode_normal(input);
            case 2: return Argon2PasswordEncoder.encode_high(input);
            case 3: return Argon2PasswordEncoder.encode_EX(input);
            default: throw new IllegalArgumentException("安全级别必须是1-3");
        }
    }

    /**
     * 增强加密（Argon2+SM4）
     * @param argon2Hash 加密
     * @param sm4Key SM4密钥(16字节的Hex字符串)
     */
    public static String encryptWithSM4(String argon2Hash, String sm4Key) {

        return Sm4Util.encrypt(argon2Hash, sm4Key);
    }

    /**
     * 密码验证
     * @param encrypted 加密后的密码
     * @param rawPassword 原始密码
     * @param sm4Key SM4密钥(16字节的Hex字符串)
     * @param useSM4 是否使用了SM4加密
     */
    public static boolean verifyPassword(String encrypted, String rawPassword,
                                         String sm4Key, boolean useSM4) {
        try {
            String argon2Hash = useSM4 ?
                    Sm4Util.decrypt(encrypted, sm4Key) : encrypted;

            return Argon2PasswordEncoder.matches(argon2Hash, rawPassword);
        } catch (Exception e) {
            return false;
        }
    }


}
